package draw;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.Region;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.View;

/**
 * Created by fuchaoyang on 2018/5/14.<br/>
 * description：
 */

public class TestClipUI extends Activity {
  @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(new ClipView(this));
  }

  class ClipView extends View {
    int width, height;

    public ClipView(Context context) {
      super(context);
    }

    @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {
      super.onSizeChanged(w, h, oldw, oldh);
      width = w;
      height = h;
    }

    @Override protected void onDraw(Canvas canvas) {
      canvas.drawColor(Color.WHITE);
      canvas.save();
      // 调用clipRect裁剪画布之后仅能编辑该区域。其余的区域只是不能编辑，但是并没有消失
      // 所以我们在调用clip之前需要先调用save保存当前画布的状态，待clip之后的绘制操作完成后，调用restore还原画布
      canvas.clipRect(0, 0, width / 2, height / 2);
      canvas.drawColor(Color.RED);
      // Region.Op 控制多次裁剪的方式，DIFFERENCE不同区域
      canvas.clipRect(0, 0, width / 4, height / 4, Region.Op.DIFFERENCE);
      // 第二次clipRect之后的画布（可编辑区域）将变成与第一次clip不同的区域
      canvas.drawColor(Color.GREEN);
      canvas.restore();

      canvas.save();
      canvas.clipRect(width / 2, height / 2, width, height);
      canvas.drawColor(Color.BLUE);
      canvas.restore();
    }
  }
}
